import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class zifuchuan { //1.1 反转字符串参数，并作为方法结果返回 Java中有多种方法可以反转字符串，其中最简单的方法是使用StringBuffer或StringBuilder自带的reverse()方法。例如，以下代码将反转字符串并将其作为方法结果返回：

    public static String reverseString(String str) {
        return new StringBuilder(str).reverse().toString();
    }
//1.2 统计字符串中每个字母出现的次数，以Map结构返回 以下代码演示了如何使用HashMap来统计字符串中每个字母出现的次数：

    public static Map<Character, Integer> countLetters(String str) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        return map;
    }
//1.3 打印出现次数最多的字母及其次数 以下代码演示了如何使用HashMap来找到出现次数最多的字母及其次数：

    public static void printMostFrequentLetter(String str) {
        Map<Character, Integer> map = countLetters(str);
        int maxCount = 0;
        char maxChar = ' ';
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (entry.getValue() > maxCount) {
                maxCount = entry.getValue();
                maxChar = entry.getKey();
            }
        }
        System.out.println("The most frequent letter is " + maxChar + ", which appears " + maxCount + " times.");
    }
//1.4 返回不含有重复字符的最长子串 以下代码演示了如何使用HashSet来找到不含有重复字符的最长子串：

    public static String longestSubstringWithoutRepeatingCharacters(String str) {
        Set<Character> set = new HashSet<>();
        String longestSubstring = "";
        int i = 0;
        int j = 0;
        while (j < str.length()) {
            if (!set.contains(str.charAt(j))) {
                set.add(str.charAt(j));
                j++;
                if (j - i > longestSubstring.length()) {
                    longestSubstring = str.substring(i, j);
                }
            } else {
                set.remove(str.charAt(i));
                i++;
            }
        }
        return longestSubstring;
    }


}
